.TH std::filesystem::filesystem_error 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::filesystem::filesystem_error \- std::filesystem::filesystem_error

.SH Synopsis
   Defined in header <filesystem>
   class filesystem_error;         \fI(since C++17)\fP

   The class std::filesystem::filesystem_error defines an exception object that is
   thrown on failure by the throwing overloads of the functions in the filesystem
   library.

   std-filesystem-filesystem error-inheritance.svg

                                   Inheritance diagram

.SH Member functions

   constructor   constructs the exception object
                 \fI(public member function)\fP
   operator=     replaces the exception object
                 \fI(public member function)\fP
   path1         returns the paths that were involved in the operation that caused the
   path2         error
                 \fI(public member function)\fP
   what          returns the explanatory string
                 \fI(public member function)\fP

Inherited from std::system_error

.SH Member functions

   code      returns error code
             \fI(public member function of std::system_error)\fP
   what      returns an explanatory string
   \fB[virtual]\fP \fI(virtual public member function of std::system_error)\fP

Inherited from std::runtime_error

Inherited from std::exception

.SH Member functions

   destructor   destroys the exception object
   \fB[virtual]\fP    \fI(virtual public member function of std::exception)\fP
   what         returns an explanatory string
   \fB[virtual]\fP    \fI(virtual public member function of std::exception)\fP

.SH Notes

   In order to ensure that copy functions of filesystem_error are noexcept, typical
   implementations store an object holding the return value of what() and two
   std::filesystem::path objects referenced by path1() and path2() respectively in a
   separately-allocated reference-counted storage.

   Currently the MS STL implementation is non-conforming: objects mentioned above are
   stored directly in the filesystem object, which makes the copy functions not
   noexcept.

.SH Example


// Run this code

 #include <filesystem>
 #include <iostream>
 #include <system_error>

 int main()
 {
     const std::filesystem::path from{"/none1/a"}, to{"/none2/b"};

     try
     {
         std::filesystem::copy_file(from, to); // throws: files do not exist
     }
     catch (std::filesystem::filesystem_error const& ex)
     {
         std::cout << "what():  " << ex.what() << '\\n'
                   << "path1(): " << ex.path1() << '\\n'
                   << "path2(): " << ex.path2() << '\\n'
                   << "code().value():    " << ex.code().value() << '\\n'
                   << "code().message():  " << ex.code().message() << '\\n'
                   << "code().category(): " << ex.code().category().name() << '\\n';
     }

     // All functions have non-throwing equivalents
     std::error_code ec;
     std::filesystem::copy_file(from, to, ec); // does not throw
     std::cout << "\\nNon-throwing form sets error_code: " << ec.message() << '\\n';
 }

.SH Possible output:

 what():  filesystem error: cannot copy file: No such file or directory [/none1/a] [/none2/b]
 path1(): "/none1/a"
 path2(): "/none2/b"
 code().value():    2
 code().message():  No such file or directory
 code().category(): generic

 Non-throwing form sets error_code: No such file or directory
